home *** CD-ROM | disk | FTP | other *** search
/ InfoMagic Internet Tools 1993 July / Internet Tools.iso / RockRidge / info-service / www / src / midaswww-1.0 / midasloadimage.c < prev    next >
Encoding:
C/C++ Source or Header  |  1992-11-16  |  1.4 KB  |  61 lines

  1. #ifdef VAX
  2. #include <lnmdef.h>
  3. #include descrip
  4. typedef struct dsc$descriptor_s string;
  5. #endif
  6.  
  7. MidasLoadImage(name)
  8. char *name;
  9. /*
  10.     The VAX version of MidasLoadImage looks for a shareable using the SLD
  11.     dynamic loading convention.
  12. */
  13. {
  14. #ifdef VAX
  15.    int Iss, lr;
  16.    string LogicalName, RoutineName = {0,0,0,0}, ImageName = {0,0,0,0};
  17.    char *p;
  18.    $DESCRIPTOR(FileDev,"LNM$FILE_DEV");
  19.  
  20.    void (*Routine)();
  21.  
  22.    char result[80] = "SHR_";   
  23.    struct {
  24.      short BufLen;
  25.      short ItmCod;
  26.      int   BufAdr;
  27.      int   RetAdr;  
  28.    } ItmLst[] = {{80, LNM$_STRING, result, 0},
  29.                  {4 , LNM$_LENGTH,  &lr, 0}, 
  30.                  {0,0,0,0}};
  31.  
  32.    strcat(result,name);
  33.  
  34.    LogicalName.dsc$a_pointer = result;
  35.    LogicalName.dsc$w_length = strlen(result);
  36.    
  37.    Iss = Sys$TrnLnm(&LNM$M_CASE_BLIND,&FileDev,&LogicalName,0,ItmLst);
  38.    if ((Iss & 1) == 0) MidasError("Could not load image %s",name);
  39.  
  40.    p = &result + lr;
  41.    *p = '\0';
  42.    
  43.    p = strstr(result,"/IMAGE=");
  44.    if (p == 0) MidasError("Could not load image %s",name);
  45.  
  46.    *p = '\0';
  47.    p += 7;
  48.    
  49.    ImageName.dsc$a_pointer = p;
  50.    ImageName.dsc$w_length = strlen(p);
  51.  
  52.    RoutineName.dsc$a_pointer = &result;
  53.    RoutineName.dsc$w_length = strlen(result);
  54.  
  55.    Iss = Lib$Find_Image_Symbol(&ImageName,&RoutineName,&Routine);
  56.    if ((Iss & 1) == 0) MidasError("Could not load image %s",name);
  57.  
  58.    Routine();
  59. #endif
  60. }
  61.